#ifndef SETCOORDINATE2DIALOG_H
#define SETCOORDINATE2DIALOG_H

#include <QDialog>
#include "../CommunicateDelegate/hmicommunicate.h"

namespace Ui {
class SetCoordinate2Dialog;
}

class CoordinateHelpDialog;

class SetCoordinate2Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit SetCoordinate2Dialog(int styleIdIn, QWidget *parent = 0);
    ~SetCoordinate2Dialog();
    void updateResult();

    /**
     * @brief updateView　更新设置数据到控件上
     */
    void updateView(int currentShowCoordinate,
                    int currentCoordinateIndex);

    void updateError(double errorResult);

    /**
     * @brief setInputEnable    设置文本框可否手动输入
     * @param value
     */
    void setInputEnable(bool value);

    void changeLanguage();

    void initialDisplayStyle(int styleId);

public:
    /**
      * @brief strHead                  头部命名
      */
     QStringList strHead;

    /**
     * @brief pointIndex                当前选择点的行号
     */
    int pointIndex;

    /**
     * @brief currentShowCoordinate     缓存from view1:坐标类型
     */
    int currentShowCoordinate;
    /**
     * @brief currentCoordinateIndex    缓存from view1:选择要编辑的坐标行号
     */
    int currentCoordinateIndex;
    /**
     * @brief userCoordinateInformation 用户坐标缓存
     */
    HmiUserCoordinateInformation userCoordinateInformation;
    /**
     * @brief toolCoordinateInformation 工具坐标缓存
     */
    HmiToolCoordinateInformation toolCoordinateInformation;

    //正式
    /**
     * @brief tmpThreeTool                          工具三点缓存
     */
    HmiToolCoordinateInformation tmpThreeTool;
    /**
     * @brief tmpSixTool                            工具六点缓存
     */
    HmiToolCoordinateInformation tmpSixTool;
    HmiToolCoordinateInformation tmpTwentyPointToolInfo;
    HmiToolCoordinateInformation tmpTwentyThreePointToolInfo;
    HmiToolCoordinateInformation tmpTwentyPointZeroToolInfo;
    /**
     * @brief tmpInputTool                          工具直接输入缓存
     */
    HmiToolCoordinateInformation tmpInputTool;
    /**
     * @brief tmpThreeTool                          用户三点缓存
     */
    HmiUserCoordinateInformation tmpThreeUser;
    /**
     * @brief tmpSixTool                            用户四点缓存
     */
    HmiUserCoordinateInformation tmpFourUser;
    /**
     * @brief tmpInputTool                          用户输入缓存
     */
    HmiUserCoordinateInformation tmpInputUser;

    /**
     * @brief beforeRadioCheck                      记录前一次选中的radio
     */
    int beforeRadioCheck;

signals:
    void setToolMass_signal(int toolIndex, double mass,QVector<double> center);
    /**
     * @brief recordPoint　载入点信号函数
     * @param coordinateIndex　选中的方式
     * @param pointIndex　选择的点的行号
     */
    void recordPoint(int coordinateType,int method, int pointIndex);

    /**
     * @brief calculateCoordinate　计算信号函数
     * @param coordinateType　选择编辑的坐标系类型
     * @param coordinateIndex　选择编辑的坐标系行号
     */
    void calculateCoordinate(int coordinateType, int coordinateIndex);

    /**
     * @brief moveToCoordinatePoint　移动到点信号函数
     * @param coordinateType　选择编辑的坐标系类型
     * @param coordinateIndex　选择编辑的坐标系行号
     * @param pointIndex　选择的点的行号
     */
    void moveToCoordinatePointPress(MoveParameter movePoint);

    /**
     * @brief moveToCoordinatePoint　移动到点完成信号函数
     */
    void moveToCoordinatePointRelease();

private slots:
    /**
     * @brief on_recordPoint_Btn_clicked　载入点响应槽函数
     */
    void on_recordPoint_Btn_clicked();

    /**
     * @brief on_calculate_Btn_clicked　计算响应槽函数
     */
    void on_calculate_Btn_clicked();

    /**
     * @brief on_forward_Btn_clicked　回到上一页响应槽函数
     */
    void on_forward_Btn_clicked();

    /**
     * @brief on_moveToPoint_Btn_pressed　移动到点按压响应槽函数
     */
    void on_moveToPoint_Btn_pressed();

    /**
     * @brief on_moveToPoint_Btn_released　移动到点释放响应槽函数
     */
    void on_moveToPoint_Btn_released();

    void on_radioThreePoint_clicked();

    void on_radiosixOrFourPoint_clicked();

    void on_radioInput_clicked();

    void on_button_setToolMass_clicked();

    void on_radio_methodext1_clicked(bool checked);

    void on_buttonHelp_clicked();

    void on_radio_methodext2_clicked(bool checked);

    void on_radio_methodext3_clicked();

private:
    void clearResultView();

private:
    Ui::SetCoordinate2Dialog *ui;
    CoordinateHelpDialog *helpDialog;
    int styleId;
};

#endif // SETCOORDINATE2DIALOG_H
